/**********************************************************************************************************************
 * \file Cpu0_Main.c
 * \copyright Copyright (C) Infineon Technologies AG 2019
 *
 * Use of this file is subject to the terms of use agreed between (i) you or the company in which ordinary course of
 * business you are acting and (ii) Infineon Technologies AG or its licensees. If and as long as no such terms of use
 * are agreed, use of this file is subject to following:
 *
 * Boost Software License - Version 1.0 - August 17th, 2003
 *
 * Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and
 * accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute,
 * and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the
 * Software is furnished to do so, all subject to the following:
 *
 * The copyright notices in the Software and this entire statement, including the above license grant, this restriction
 * and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all
 * derivative works of the Software, unless such copies or derivative works are solely in the form of
 * machine-executable object code generated by a source language processor.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
 * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
 * COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN
 * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 * IN THE SOFTWARE.
 *********************************************************************************************************************/
#include "Ifx_Types.h"
#include "IfxCpu.h"
#include "IfxScuWdt.h"
#include "Port/Io/IfxPort_Io.h"
#include "SysSe/Bsp/Bsp.h"
#include "STM_Interrupt.h"

IfxCpu_syncEvent g_cpuSyncEvent = 0;
#define OS_TICK_IRQ_PRIO  2


int core0_main(void)
{
//    OS_ERR  err;
    IfxCpu_enableInterrupts();

    /* !!WATCHDOG0 AND SAFETY WATCHDOG ARE DISABLED HERE!!
     * Enable the watchdogs and service them periodically if it is required
     */
    IfxScuWdt_disableCpuWatchdog(IfxScuWdt_getCpuWatchdogPassword());
    IfxScuWdt_disableSafetyWatchdog(IfxScuWdt_getSafetyWatchdogPassword());

    /* Wait for CPU sync event */
    IfxCpu_emitEvent(&g_cpuSyncEvent);
    IfxCpu_waitEvent(&g_cpuSyncEvent, 1);

//    IfxCpu_disableInterrupts();     //BSP_IntDisAll();          /* Disable all interrupts.                              */

    initTime();
    initSTM();                                      /* Configure the STM module                                     */

    IfxPort_setPinMode(&MODULE_P14, 9, IfxPort_Mode_outputPushPullGeneral);





//    OSInit(&err);                                               /* Init uC/OS-III.                                      */

//    OSTaskCreate((OS_TCB     *)&AppTaskStartTCB,                /* Create the start task                                */
//                 (CPU_CHAR   *)"App Task Start",
//                 (OS_TASK_PTR ) AppTaskStart,
//                 (void       *) 0,
//                 (OS_PRIO     ) APP_TASK_START_PRIO,
//                 (CPU_STK    *)&AppTaskStartStk[0],
//                 (CPU_STK_SIZE) APP_TASK_START_STK_SIZE / 10,
//                 (CPU_STK_SIZE) APP_TASK_START_STK_SIZE,
//                 (OS_MSG_QTY  ) 5u,
//                 (OS_TICK     ) 0u,
//                 (void       *) 0,
//                 (OS_OPT      )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
//                 (OS_ERR     *)&err);
//    OSStart(&err);                                              /* Start multitasking (i.e. give control to uC/OS-III). */


    while(1)
    {

//        IfxPort_togglePin(&MODULE_P14, 9);
        wait(TimeConst_1s);

    }
    return (1);
}
